home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / xgakit.exe / XGAKIT.ASM < prev    next >
Assembly Source File  |  1991-05-06  |  34KB  |  1,191 lines

  1. ;
  2. ;    XGA Adapter Programmer's Toolkit, version 1.1
  3. ;        by Bert Tyler of Tyler Software
  4. ;        CIS ID:  73477,433
  5. ;        (From Internet/BITNET: 73477.433@compuserve.com)
  6. ;    Copyright 1990, 1991 Tyler Software
  7. ;    (except, of course, for those parts copied right out of IBM's
  8. ;    "Preliminary XGA Video Subsystem Hardware Users Guide")
  9. ;        ((which is most of the code, really...))
  10. ;
  11. ;    Free for use in commercial, shareware or freeware applications
  12. ;
  13. ;    Routines in this module:
  14. ;
  15. ;    int xga_detect()
  16. ;        returns    0 if no XGA adapter found
  17. ;            non-zero if XGA adapter found
  18. ;        bits:    0 - XGA adapter found
  19. ;            1 - XGA monitor is color, not mono
  20. ;            2 - XGA monitor is high-rez - capable of 1024x768
  21. ;            3 - XGA adapter has 1MB of RAM
  22. ;            4 - XGA adapter is in a dual-monitor setup
  23. ;        (IE, return code of 7 means XGA adapter with 512K of RAM
  24. ;        connected to a high-rez color monitor in a single-
  25. ;        monitor setup)
  26. ;
  27. ;    int xga_mode(int mode)
  28. ;        mode =    0 to enter normal VGA text mode (BIOS mode 3)
  29. ;            1 to enter 132-col VGA text mode
  30. ;            2 to enter 1024x768x256 graphics mode
  31. ;            3 to enter 1024x768x16 graphics mode
  32. ;            4 to enter 640x480x256 graphics mode
  33. ;            5 to enter 640x480x65536 graphics mode
  34. ;            6 to enter 800x600x16 graphics mode
  35. ;            7 to enter 800x600x256 graphics mode
  36. ;            8 to enter 800x600x65536 graphics mode
  37. ;        returns    0 on failure
  38. ;            1 on success
  39. ;        (NOTE!  You *must* use 'xga_mode(0)' to exit any of the
  40. ;        other modes and get back to standard VGA operation, even
  41. ;        on a dual-monitor (XGA & VGA) setup!  On a dual-monitor
  42. ;        setup, 'xga_mode(0)' leaves the XGA image intact, but
  43. ;        disables the XGA adapter's 64K aperture at A000:0000)
  44. ;
  45. ;    void xga_putpixel(int row, int col, int color)
  46. ;        writes pixel (row, col) using color
  47. ;        (all pixel counts start at 0, and [0][0] is in the UL corner)
  48. ;
  49. ;    int xga_getpixel(int row, int col)
  50. ;        returns    color of pixel at (row, col)
  51. ;        (all pixel counts start at 0, and [0][0] is in the UL corner)
  52. ;
  53. ;    void xga_putline(int row, int firstcol, int lastcol, char *pixels)
  54. ;        sends the line segment directly to the video
  55. ;        (all pixel counts start at 0, and [0][0] is in the UL corner)
  56. ;        (IE, xga_putline(3,7,12,*pixels) sends pixel[0] thru pixel[5]
  57. ;        to the 8th thru 13th pixel in the fourth row)
  58. ;
  59. ;    void xga_getline(int row, int firstcol, int lastcol, char *pixels)
  60. ;        reads the line segment directly from the video
  61. ;        (all pixel counts start at 0, and [0][0] is in the UL corner)
  62. ;        (IE, xga_putline(3,7,12,*pixels) fills pixel[0] thru pixel[5]
  63. ;        from the 8th thru 13th pixel in the fourth row)
  64. ;
  65. ;    void xga_setpalette(char *palette)
  66. ;        where 'palette' points to a 768-byte array of RGB values
  67. ;            (values from 0-255, not the VGA's internal 0-63!)
  68. ;
  69.  
  70.     .MODEL    medium,c
  71.  
  72.  
  73.     .DATA
  74.  
  75. public        xga_isinmode        ; (only public for Fractint purposes)
  76. public        xga_clearvideo        ; (only public for Fractint purposes)
  77.  
  78. xga_pos_base    dw    0        ; MCA Pos Base value
  79. xga_cardid    dw    0        ; MCA Card ID value
  80. xga_reg_base    dw    -1        ; XGA IO Reg Base (-1 means dunno yet)
  81. xga_1mb        dd    0        ; XGA 1MB aperture address
  82. xga_4mb        dd    0        ; XGA 4MB aperture address
  83. xga_result    dw    0        ; XGA_detect result code
  84. xga_isinmode    dw    0        ; XGA is in this mode right now
  85. xga_iscolors    dw    0        ; XGA using this many colors (0=64K)
  86. xga_clearvideo    db    0        ; set to 80h to prevent video-clearing
  87. xga_dotwrite    dw    0        ; write-a-dot routine:    mode-specific
  88. xga_dotread     dw    0        ; read-a-dot routine:    mode-specific
  89. xga_linewrite    dw    0        ; write-a-line routine: mode-specific
  90. xga_lineread    dw    0        ; read-a-line routine: mode-specific
  91. xga_curbk    dw    0        ; bank number
  92. xga_xdots    dw    0        ; bytes per scan line
  93. xga_linelen    dw    0        ; line segment length
  94. xga_offset    dw    0        ; line segment offset
  95.  
  96.     .CODE
  97.  
  98. ;        Graphics mode setup values
  99. ;        (the first two entries in each line 
  100. ;        indicate where the table values are to be stored)
  101. ;
  102. ;        1024x768x256 vvv
  103. ;        1024x768x16  -----vvvv
  104. ;        640x480x256  -----------vvvv
  105. ;        640x480x65536 ----------------vvvv
  106. ;        800x600x16   -----------------------vvvv
  107. ;        800x600x256  -----------------------------vvvv
  108. ;        800x600x65536 ----------------------------------vvvv
  109.  
  110. xga_twidth dw    9                    ; width of these tables
  111.  
  112. xga_requir dw      0,    0,  0dh,  05h,  01h,  09h,  01h,  01h,  09h    ; adapter requirements
  113. xga_colors dw       0,    0,  256,   16,  256,    0,   16,  256,    0    ; 0 means 64K colors
  114. xga_swidth dw      0,    0, 1024,  512,  640, 1280,  400,  800, 1600    ; bytes / scan line
  115.  
  116. xga_val    db    004h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; interrupt enable
  117.     db    005h, 000h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh    ; interrupt status
  118.     db    000h, 000h, 004h, 004h, 004h, 004h, 004h, 004h, 004h    ; operating mode
  119.     db    00ah, 064h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; palette mask
  120.     db    001h, 000h, 001h, 001h, 001h, 001h, 001h, 001h, 001h    ; vid mem aper cntl
  121.     db    008h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; vid mem aper indx
  122.     db    006h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; virt mem ctl
  123.     db    009h, 000h, 003h, 002h, 003h, 004h, 002h, 003h, 004h    ; mem access mode
  124.     db    00ah, 050h, 001h, 001h, 001h, 001h, 001h, 001h, 001h    ; disp mode 1
  125.     db    00ah, 050h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; disp mode 1
  126.     db    00ah, 010h, 09dh, 09dh, 063h, 063h, 088h, 088h, 088h    ; horiz tot lo.
  127.     db    00ah, 011h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; horiz tot hi.
  128.     db    00ah, 012h, 07fh, 07fh, 04fh, 04fh, 063h, 063h, 063h    ; hor disp end lo
  129.     db    00ah, 013h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; hor disp end hi
  130.     db    00ah, 014h, 07fh, 07fh, 04fh, 04fh, 063h, 063h, 063h    ; hor blank start lo
  131.     db    00ah, 015h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; hor blank start hi
  132.     db    00ah, 016h, 09dh, 09dh, 063h, 063h, 088h, 088h, 088h    ; hor blank end lo
  133.     db    00ah, 017h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; hor blank end hi
  134.     db    00ah, 018h, 087h, 087h, 055h, 055h, 06ah, 06ah, 06ah    ; hor sync start lo
  135.     db    00ah, 019h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; hor sync start hi
  136.     db    00ah, 01ah, 09ch, 09ch, 061h, 061h, 084h, 084h, 084h    ; hor sync end lo
  137.     db    00ah, 01bh, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; hor sync end hi
  138.     db    00ah, 01ch, 040h, 040h, 000h, 000h, 000h, 000h, 000h    ; hor sync pos
  139.     db    00ah, 01eh, 004h, 004h, 000h, 000h, 000h, 000h, 000h    ; hor sync pos
  140.     db    00ah, 020h, 030h, 030h, 00ch, 00ch, 086h, 086h, 086h    ; vert tot lo
  141.     db    00ah, 021h, 003h, 003h, 002h, 002h, 002h, 002h, 002h    ; vert tot hi
  142.     db    00ah, 022h, 0ffh, 0ffh, 0dfh, 0dfh, 057h, 057h, 057h    ; vert disp end lo
  143.     db    00ah, 023h, 002h, 002h, 001h, 001h, 002h, 002h, 002h    ; vert disp end hi
  144.     db    00ah, 024h, 0ffh, 0ffh, 0dfh, 0dfh, 057h, 057h, 057h    ; vert blank start lo
  145.     db    00ah, 025h, 002h, 002h, 001h, 001h, 002h, 002h, 002h    ; vert blank start hi
  146.     db    00ah, 026h, 030h, 030h, 00ch, 00ch, 086h, 086h, 086h    ; vert blank end lo
  147.     db    00ah, 027h, 003h, 003h, 002h, 002h, 002h, 002h, 002h    ; vert blank end hi
  148.     db    00ah, 028h, 000h, 000h, 0eah, 0eah, 058h, 058h, 058h    ; vert sync start lo
  149.     db    00ah, 029h, 003h, 003h, 001h, 001h, 002h, 002h, 002h    ; vert sync start hi
  150.     db    00ah, 02ah, 008h, 008h, 0ech, 0ech, 06eh, 06eh, 06eh    ; vert sync end
  151.     db    00ah, 02ch, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh    ; vert line comp lo
  152.     db    00ah, 02dh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh    ; vert line comp hi
  153.     db    00ah, 036h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; sprite cntl
  154.     db    00ah, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; start addr lo
  155.     db    00ah, 041h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; start addr me
  156.     db    00ah, 042h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; start addr hi
  157.     db    00ah, 043h, 080h, 040h, 050h, 0a0h, 032h, 064h, 0c8h    ; pixel map width lo
  158.     db    00ah, 044h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; pixel map width hi
  159.     db    00ah, 054h, 00dh, 00dh, 000h, 000h, 001h, 001h, 001h    ; clock sel
  160.     db    00ah, 051h, 003h, 002h, 003h, 004h, 002h, 003h, 004h    ; display mode 2
  161.     db    00ah, 070h, 000h, 000h, 000h, 000h, 080h, 080h, 080h    ; ext clock sel
  162.     db    00ah, 050h, 00fh, 00fh, 0c7h, 0c7h, 007h, 007h, 007h    ; display mode 1
  163.     db    00ah, 055h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; Border Color
  164.     db    00ah, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h    ; Sprite Pal Lo
  165.     db